From 81e78a55631da105991fdbfc7657385aa1d4ddaf Mon Sep 17 00:00:00 2001 From: =?utf8?q?Daniel=20Vr=C3=A1til?= Date: Sat, 1 Dec 2018 17:56:41 +0100 Subject: [PATCH] [PATCH] MySQL: Free the results when QSqlQuery::finished() is called Calling mysql_stmt_free_result() frees the results of the last executed query while keeping the prepared statement valid. This allows one to keep around prepared QSqlQueries without the overhead of keeping all the results in memory. Change-Id: I4589e90857cc4e9a6f9612799bfca967a67e2ab2 Reviewed-by: Thiago Macieira Reviewed-by: Andy Shaw Gbp-Pq: Name mysql_free_results_when_qsqlquery_finished_is_called.patch --- src/plugins/sqldrivers/mysql/qsql_mysql.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/plugins/sqldrivers/mysql/qsql_mysql.cpp b/src/plugins/sqldrivers/mysql/qsql_mysql.cpp index f2ae3fbc4..80c0c9c52 100644 --- a/src/plugins/sqldrivers/mysql/qsql_mysql.cpp +++ b/src/plugins/sqldrivers/mysql/qsql_mysql.cpp @@ -197,6 +197,7 @@ protected: QSqlRecord record() const override; void virtual_hook(int id, void *data) override; bool nextResult() override; + void detachFromResultSet() override; #if MYSQL_VERSION_ID >= 40108 bool prepare(const QString &stmt) override; @@ -804,6 +805,15 @@ int QMYSQLResult::numRowsAffected() return d->rowsAffected; } +void QMYSQLResult::detachFromResultSet() +{ + Q_D(QMYSQLResult); + + if (d->preparedQuery) { + mysql_stmt_free_result(d->stmt); + } +} + QVariant QMYSQLResult::lastInsertId() const { Q_D(const QMYSQLResult); -- 2.30.2